package base.thread;

public class ThreadLocalDemo {

    static class Banks{
        //threadlocal保证了每一个数据拥有一个数据副本 , 相当于对共享数据的一种保护(同步处理)
        private ThreadLocal<Integer>local=new ThreadLocal<Integer>(){
            @Override
            protected Integer initialValue() {
                //  初始化数据
                return 5;
            }
        };

        public int get(){
            return local.get();
        }

        public void setLocal(int money){
            local.set(get()+money);
        }

    }

    static class Trains implements Runnable{

        Banks banks;
        public Trains(Banks banks){
            this.banks=banks;
        }

        @Override
        public void run() {
            for (int i=0;i<10;i++){
                banks.setLocal(10);
                String name=Thread.currentThread().getName();
                System.out.println("  name   " + name + "     金  额：   " + banks.get());
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }


    public static void main(String[] args) {

        Banks banks=new Banks();
        Thread thread1=new Thread(new Trains(banks),"user1");
        Thread thread2=new Thread(new Trains(banks),"user2");
        thread1.start();
        thread2.start();

    }

}
//name   user2     金  额：   10
//  name   user2     金  额：   20
//  name   user2     金  额：   30
//  name   user1     金  额：   10
//  name   user2     金  额：   40
//  name   user1     金  额：   20
//  name   user2     金  额：   50
//  name   user1     金  额：   30
//  name   user2     金  额：   60
//  name   user1     金  额：   40
//  name   user2     金  额：   70
//  name   user1     金  额：   50
//  name   user2     金  额：   80
//  name   user2     金  额：   90
//  name   user1     金  额：   60
//  name   user2     金  额：   100
//  name   user1     金  额：   70
//  name   user1     金  额：   80
//  name   user1     金  额：   90
//  name   user1     金  额：   100
